1

問題求解代理人簡介

PolyU COMP5511Lecture 2
00:00

從反射到規劃

在代理人設計的演進歷程中,我們從 反射型代理人(根據簡單規則將感知直接對應至動作,例如「若前方車輛煞車,則啟動煞車」)發展到 問題求解代理人。反射型代理人依據當下情境運作,而問題求解代理人則是 目標導向。他們會考量行動的未來後果,以找出能滿足特定目標的行動序列。

  • 反射型代理人: $Action = Function(Percept)$
  • 規劃型代理人: $Action\_Sequence = Search(State, Goal)$

原子狀態表示法

在這個基礎層級,代理人採用 原子表示法。這表示世界的狀態被視為一個黑箱——單一節點,其內部結構對搜尋演算法而言是不可見的。代理人僅針對下列項目進行推理:

  • 狀態 ($S$): 環境的快照。
  • 動作 ($A$): 狀態之間的轉換。
  • 目標測試: 檢查狀態 $s \in S_{goal}$ 是否成立的布林判斷。

問題求解循環

問題求解代理人遵循一套明確的四步驟循環來探索環境:

  1. 目標制定: 根據當前情境決定要追求的目標。
  2. 問題制定: 將真實世界抽象化為數學模型(狀態與動作)。
  3. 搜尋: 模擬各種動作序列,以找出 最佳路徑。
  4. 執行: 在搜尋階段找到動作後,不再進一步思考即直接執行(假設環境為靜態)。
Python 實作 (agent_types.py)
1
class ReflexAgent:
2
defact(self, percept):
3
# Direct mapping: Rule -> Action
4
return rules.get(percept, default_action)
5
6
class ProblemSolvingAgent:
7
def__init__(self):
8
self.seq = [] # Buffered action sequence
9
10
defact(self, percept):
11
# If we are mid-execution, continue
12
ifself.seq:
13
returnself.seq.pop(0)
14
15
# Otherwise, Plan (Search)
16
state = self.update_state(percept)
17
goal = self.formulate_goal(state)
18
problem = self.formulate_problem(state, goal)
19
20
# Search returns a list of actions
21
self.seq = search_algorithm(problem)
22
23
returnself.seq.pop(0)